package cn.tedu.csmall.cart.webapi.controller;

import cn.tedu.csmall.cart.service.ICartService;
import cn.tedu.csmall.commons.pojo.cart.dto.CartAddDTO;
import cn.tedu.csmall.commons.restful.JsonResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
@RequestMapping("/base/cart")
@Api(tags = "购物车管理模块")
public class CartController {
    // 装配业务逻辑层对象
    @Autowired
    private ICartService cartService;

    @PostMapping("/add")
    @ApiOperation("新增购物车中的商品")
    public JsonResult cartAdd(CartAddDTO cartAddDTO){
        cartService.cartAdd(cartAddDTO);
        return JsonResult.ok("新增购物车商品完成!");
    }

    // 装配RestTemplate调用远程方法
    @Autowired
    private RestTemplate restTemplate;
    @PostMapping("/delete")
    @ApiOperation("删除购物车中的商品")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "用户Id",name="userId",example = "UU100"),
            @ApiImplicitParam(value = "商品编号",name="commodityCode",example = "PC100"),
    })
    public JsonResult deleteUserCart(String userId,String commodityCode){
        cartService.deleteUserCart(userId,commodityCode);
        // 购物车删除之后,把库存减少
        // 只要想通过RestTemplate调用远程方法,都要先确定url
        String url="http://localhost:20003/base/stock/reduce/count?" +
                "commodityCode={1}&reduceCount={2}";
        // 发起调用
        // 参数有3部分
        // 1.第一个参数:请求的url,就是要访问的路径
        // 2.第二个参数:返回值类型的反射,根据实际情况编写即可
        // 3.第三个参数开始:是为url中的占位符赋值,例如上面的{1},{2}....
        //                赋值规则:第三个参数赋值给{1},第四个参数赋值给{2}.....
        JsonResult jsonResult = restTemplate.getForObject(url, JsonResult.class,
                commodityCode, 5);
        System.out.println(jsonResult);

        return JsonResult.ok("删除购物车商品完成");
        
    }

    @GetMapping("/get/id")
    @ApiOperation("远程调用Leaf获取分布式id")
    public Long getLeafId(){
        String url="http://localhost:9090/api/segment/get/{1}";
        Long id=restTemplate.getForObject(url,Long.class,"sku");
        return id;
    }



}
